// 加密密钥
let ENCRYPTION_KEY = '';

// 生成符合AES要求的密钥
function generateKey(rawKey) {
    // 使用SHA-256生成固定长度的密钥
    const hash = CryptoJS.SHA256(rawKey);
    // 取前32字节作为AES-256密钥
    return CryptoJS.enc.Base64.stringify(hash).substring(0, 32);
}

// 获取加密密钥
async function getEncryptionKey() {
    try {
        const response = await fetch('/api/encryption-key');
        if (response.ok) {
            const data = await response.json();
            ENCRYPTION_KEY = generateKey(data.key);
        } else {
            console.error('获取加密密钥失败');
        }
    } catch (error) {
        console.error('获取加密密钥失败:', error);
    }
}

// 加密函数
function encryptData(data) {
    if (!ENCRYPTION_KEY) {
        throw new Error('加密密钥未初始化');
    }
    // 使用CBC模式和PKCS7Padding
    const key = CryptoJS.enc.Utf8.parse(ENCRYPTION_KEY);
    // 使用密钥的前16字节作为IV
    const iv = CryptoJS.enc.Utf8.parse(ENCRYPTION_KEY.substring(0, 16));
    const encrypted = CryptoJS.AES.encrypt(JSON.stringify(data), key, {
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });
    return encrypted.toString();
}

// 获取表单和密码字段
const form = document.getElementById("register-form");
const usernameInput = document.getElementById("username");
const passwordInput = document.getElementById("password");
const confirmPasswordInput = document.getElementById("confirm-password");

// 页面加载时获取加密密钥和随机背景
getEncryptionKey();
setRandomBackground();

// 设置随机背景图片
async function setRandomBackground() {
    try {
        const response = await fetch('/api/backgrounds');
        if (response.ok) {
            const data = await response.json();
            if (data.success && data.images.length > 0) {
                // 随机选择一张图片
                const randomIndex = Math.floor(Math.random() * data.images.length);
                const randomImage = data.images[randomIndex];
                document.body.style.backgroundImage = `url('/images/${randomImage}')`;
            }
        }
    } catch (error) {
        console.error('获取背景图片失败:', error);
    }
}

// 监听表单提交
form.addEventListener("submit", async function (event) {
    event.preventDefault();  // 防止表单默认提交

    const username = usernameInput.value.trim();
    const password = passwordInput.value.trim();
    const confirmPassword = confirmPasswordInput.value.trim();

    // 检查密码和确认密码是否一致
    if (password !== confirmPassword) {
        alert("密码和确认密码不一致，请重新输入！");
        return;
    }

    // 检查用户名和密码是否为空
    if (!username || !password) {
        alert("请输入用户名和密码！");
        return;
    }

    try {
        // 确保已获取加密密钥
        if (!ENCRYPTION_KEY) {
            await getEncryptionKey();
        }

        // 加密数据
        const encryptedData = encryptData({
            username: username,
            password: password
        });

        // 发送POST请求到后端API
        const response = await fetch('/api/register', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify({ encryptedData: encryptedData })
        });

        // 检查响应状态
        if (response.ok) {
            const data = await response.json();
            if (data.success) {
                // 注册成功
                alert("注册成功！");
                // 登录成功后跳转
                window.location.href = "../html/success.html";
            } else {
                // 注册失败，显示错误消息
                alert(data.message || "注册失败，请稍后再试！");
            }
        } else {
            // 处理不同的错误状态
            const data = await response.json();
            alert(data.message || "服务器出错，请稍后再试！");
        }
    } catch (error) {
        console.error('注册请求失败:', error);
        alert("发生了一个错误，请稍后再试！");
    }
});
